;:sys36864 ;.opt o ; ; ------ startadresse ----- ; *= 2142 ; ; **** speech-finder v1.0 **** ; ; von nikolaus heusler ; XXXXXXXXXXXX XX ; XXXX XXXXXXXX XX ; ; (c) 64'er, markt & technik 1991 ; ; ------- variablen ------- ; mem =2 ;zeiger in speicher bts =4 ;anzahl der bits ojoy =254 ;alter joystick-wert ric =5 ;laufrichtung v =1277 ;bildschirm-position tmp =166 ;zwischenspeicher tem =6 ;tempo vol =54296 ;sid-lautstaerke ; ; ------- programm -------- ; ; --- initialisieren jsr 65409 ;videochip initialisieren lda #hi jsr $ab1e ;strout bildschirmtext ausgeben lda #0 sta ric ;vorwaerts sta mem sta mem+1 ;speicherzeiger ldx #24 csid sta 54272,x ;sid loeschen dex bpl csid lda #9 sta tem ;starttempo = 9 lda #2 sta bts ;aufloesung anfangs 2 bit jsr par ;parameter am schirm ausgeben ; --- hauptschleife pump sei ;interrupt aus lda #48 sta 1 ;ram einblenden lda mem+1 sta v+240 ldy #0 lda (mem),y ;ein byte aus speicher holen sta tmp ;und merken lda #55 sta 1 cli ;und rom wiederherstellen ldx bts ;anzahl der bits bne no1 ;nicht ein bit ; --- 1 bit ldy #7 ;acht werte b1l lda tmp asl adc #0 sta tmp ;register linksverschieben and #1 ;unterstes bit ist datenbit beq n1l lda #15 ;lautstaerke 15 n1l jsr tb ;lautstaerke an sid melden und pause dey ;naechstes bit bpl b1l bmi rdy ;fertig no1 dex ;zwei bit bne no2 ;nein, dann vier bit ; --- 2 bit ldy #3 ;vier werte b2l lda tmp asl adc #0 asl adc #0 sta tmp ;register zweimal linksverschieben and #3 ;datenbits sind bits 0 und 1 tax lda tab2,x ;wert aus tabelle lesen jsr tb ;und an sid melden und warten dey ;weitere bits bpl b2l bmi rdy ;nein dann fertig no2 =* ; --- 4 bit ldy #1 ;zwei werte b4l lda tmp asl adc #0 asl adc #0 asl adc #0 asl adc #0 ;register viermal linksverschieben and #15 ;datenbits im unteren nibble jsr tb ;an sid melden, pause dey ;noch einen wert bpl b4l ; --- ein byte abgerabeitet rdy lda ric ;laufrichtung bne rew ;nicht null, dann rueckwaerts ; --- vorwaerts inc mem ;zeiger auf naechste zelle richten bne next inc mem+1 ;high jmp next ; --- rueckwaerts rew lda mem bne r1 dec mem+1 ;zeiger auf vorherige speicherzelle richten r1 dec mem ;= um eins erniedrigen ; --- naechstes byte bearbeiten, joystick abfragen next lda 56320 ;joystick lesen and #31 cmp ojoy beq k5 sta ojoy ;entprellen lda 56320 and #1 ;oben bne k1 ; --- anzahl bits veraendern ldx bts inx cpx #3 bcc j1 ldx #0 j1 stx bts jsr par ;parameter ausgeben k1 lda 56320 and #2 ;unten bne k2 ; --- laufrichtung umdrehen lda ric eor #1 ;invertieren sta ric jsr par ;parameter anzeigen k2 lda 56320 and #4 ;links bne k3 ; --- tempo veraendern ldx tem dex bpl j3 ldx #9 ;maximalwert j3 stx tem ;neues tempo jsr par ;parameter ausgeben k3 lda 56320 and #8 ;rechts bne k4 lda #0 sta vol ;stumm jmp 65409 ;fertig k4 lda 56320 and #16 ;feuer beq x5 ;ja, dann hexanzeige k5 jmp pump ;sonst weiter in hauptschleife ; --- adresse hexadezimal einblenden x5 lda #12 sta 214 ;cursorzeile lda #16 sta 211 ;cursorspalte jsr 58732 ;cursor an neue stelle lda #"$" jsr 65490 ;dollarzeichen drucken lda mem+1 ;adresse high jsr hex ;ausgeben lda mem ;und lowbyte jsr hex ;auch ldx #0 ldy #0 ;verzoegerung, ca. 1 sekunde pse dex bne pse ;um stick zu entprellen dey bne pse f1 lda 56320 and #16 ;wenn feuerknopf immer noch gedrueckt beq f1 ;warten f2 lda 56320 and #16 ;feuer bne f1 ;warten, bis feuer gedrueckt lda #16 sta 211 ;cursor auf spalte 16 ldx #4 ;fuenf leerzeichen spl jsr $ab3f ;space drucken dex ;und anzeige bpl spl ;loeschen jmp pump ; ; --- zahl hexadezimal ausdrucken hex pha lsr lsr lsr lsr ;erst high-nibble drucken jsr hex1 pla ;low-nibble hex1 and #15 ;signifikante bits isolieren tax ;als tabellen-index lda hext,x ;hexwert aus tabelle jmp 65490 ;ausdrucken ; ; --- sid-lautstaerke setzen und pause tb sta vol ;wert an sid melden ldx tem ;tempo beq fert ;null, dann keine pause wait nop nop ;verzoegerung nop nop nop nop dex bpl wait fert rts ; ; --- parameter am bildschirm ausgeben par ldx bts ;anzahl bits lda bitt,x sta v ;in video-ram ldx ric lda rict,x sta v+80 ;richtung lda #"9" sec sbc tem sta v+160 ;neun minus tempo rts ; ; ------ diverse texte ---- ; hi .byte "speech-finder v1" .byt 13 .byte "\xa3\xa3\xa3\xa3\xa3\xa3\xa3\xa3\xa3\xa3\xa3\xa3\xa3\xa3\xa3\xa3" .byt 13,13 .byte "von nikolaus heusler, 01.91" .byt 13 .byte "\x11\x11 anz. bits: \xa0" .byt 13 .byte "\x11 richtung: \xa0" .byt 13 .byte "\x11 tempo: \xa0" .byt 13 .byte "\x11 speicher: \xa0" .byt 13 .byte "\x11\x11bedienung: joystick port 2" brk hext .byte "0123456789abcdef" bitt .byte "124" rict .byte "\x16\x12" tab2 .byt 15,10,5,0